package com.example.clsj.netty;

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 * Text客户端处理器类，继承自ChannelInboundHandlerAdapter，用于处理客户端的通道事件
 *
 * @Author: cy
 * @Date: 2024/8/23
 */

public class TextClientHandler extends ChannelInboundHandlerAdapter {

    private static final Log log = LogFactory.get();

    /**
     * 当通道变得活跃时被调用，即客户端连接到服务器时
     * 此处可以添加特定的初始化逻辑
     *
     * @param ctx 上下文对象，包含通道及其管道等信息
     * @throws Exception 如果处理中出现异常
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

    }

    /**
     * 当通道从服务器读取到数据时被调用
     * 此处处理从服务器接收到的消息
     *
     * @param ctx 上下文对象，包含通道及其管道等信息
     * @param msg 从服务器接收到的消息
     * @throws Exception 如果处理中出现异常
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

    }

    /**
     * 当所有数据读取完毕时被调用
     * 此处可以进行数据读取完毕后的处理逻辑
     *
     * @param ctx 上下文对象，包含通道及其管道等信息
     * @throws Exception 如果处理中出现异常
     */
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {

    }

    /**
     * 当发生异常时被调用
     * 此处处理异常情况，通常进行资源的释放或错误处理
     *
     * @param ctx 上下文对象，包含通道及其管道等信息
     * @param cause 异常原因
     * @throws Exception 如果处理中出现异常
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        log.error("" + cause.getMessage(), cause);
        ctx.close();
    }
}
